perm filename DUMPEM.SAI[KID,KMC] blob sn#122893 filedate 1974-11-15 generic text, type T, neo UTF8
BEGIN "DUMPEM"
	INTEGER ARRAY HSTBUF[0:127];
	INTEGER ARRAY DRCTRY[0:127];
	INTEGER GAME,HR,MIN,SEC,LASTGAME,DENT,HENT,D,H,FLAG;
	INTEGER DATE,OLDDATE,NORMAL,TIME,CHAR,IGNORE,NOCHARS;
	INTEGER DATEMASK,TIMEMASK,DAY,MO,YR,NOBLKS;
	STRING FILNAM,EFFECTIVE;
	LABEL GETNAM;
	DEFINE CRLF="13&10";
	DEFINE HSTCHN="11";
	DEFINE RPTCHN="10";
	DEFINE FORMDATE="
	START_CODE
	MOVE  '15,DENT;
	AND  '15,DATEMASK;
	MOVEM  '15,DATE;
	END";
	DEFINE FORMNORM="
	QUICK_CODE
	MOVE  '15,DENT;
	LSH  '15,-35;
	MOVEM  '15,NORMAL;
	END";
	DEFINE SPLITENT="
	START_CODE
	MOVE  '15,HENT;
	MOVE  '14,'15;
	AND  '14,TIMEMASK;
	MOVEM  '14,TIME;
	MOVE  '14,'15;
	LSH  '14,-24;
	MOVE  '13,'14;
	ANDI  '14,'17;
	MOVEM  '14,GAME;
	LSH  '13,-4;
	ANDI  '13,1;
	MOVEM  '13,IGNORE;
	LSH  '15,-29;
	SUBI  '15,'40;
	MOVEM  '15,CHAR;
	END";
	DATE←OLDDATE←0;
	NORMAL←1;
	DATEMASK←'007777777777;
	TIMEMASK←'000077777777;
GETNAM:	OUTSTR(CRLF & "TYPE THE CHILD'S NAME, THEN CARRIAGE RETURN: ");
	FILNAM←INCHWL;
	OPEN(HSTCHN,"DSK",15,0,0,0,0,0);
	LOOKUP(HSTCHN,FILNAM&".HST[1,KMC]",FLAG);
	IF FLAG THEN BEGIN
		OUTSTR("FILE "&FILNAM&".HST [1,KMC] NOT FOUND");
		RELEASE(HSTCHN);
		GOTO GETNAM;
		END;
	OPEN(RPTCHN,"DSK",0,0,2,0,0,0);
	ENTER(RPTCHN,FILNAM&".RPT",FLAG);
	ARRYIN(HSTCHN,DRCTRY[0],128);
	NOBLKS←DRCTRY[0] MOD '1000000;
	FOR D←1 STEP 1 UNTIL NOBLKS DO BEGIN
		DENT←DRCTRY[D];
		FORMDATE;
		IF DATE≠OLDDATE THEN BEGIN
			IF OLDDATE≠0 THEN
			 OUT(RPTCHN,"END OF SESSION"&CRLF&CRLF&CRLF);
			DAY←(DATE MOD 31)+1;
			MO←((DATE DIV 31)MOD 12)+1;
			YR←((DATE DIV 31)DIV 12)+64;
			OUT(RPTCHN,"SESSION OF "&CVS(MO)&"/"&CVS(DAY)&"/"
			 &CVS(YR)&CRLF&CRLF);
			OLDDATE←DATE;
			END;
		FORMNORM;
		ARRYIN(HSTCHN,HSTBUF[0],128);
		NOCHARS←HSTBUF[0] MOD '1000000;
		FOR H←1 STEP 1 UNTIL NOCHARS DO BEGIN
			HENT←HSTBUF[H];
			SPLITENT;
			TIME←TIME DIV 60;
			SEC←TIME MOD 60;
			MIN←(TIME DIV 60)MOD 60;
			HR←TIME DIV 3600;
			IF ¬IGNORE THEN EFFECTIVE←"EFFECTIVE"
			 ELSE EFFECTIVE←" ";
			IF GAME ≠ LASTGAME THEN OUT(RPTCHN,CRLF);
			OUT(RPTCHN,CVS(GAME)&"   "&CVXSTR(CHAR)&"   "&CVS(HR)
			 &":"&CVS(MIN)&":"&CVS(SEC)&" "&EFFECTIVE&CRLF);
			LASTGAME←GAME;
			END;
		IF ¬NORMAL THEN OUT(RPTCHN,CRLF&"SYSTEM CRASHED"&CRLF);
		END;
	OUT(RPTCHN,"END OF LAST SESSION");
	RELEASE(RPTCHN);
	RELEASE(HSTCHN);
	OUTSTR("REPORT IS ON "&FILNAM&".RPT"&CRLF);
	END "DUMPEM";